{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: F\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "    if score >= 90:\n",
    "        return 'A'\n",
    "    elif score >= 80:\n",
    "        return 'B'\n",
    "    elif score >= 70:\n",
    "        return 'C'\n",
    "    elif score >= 60:\n",
    "        return 'D'\n",
    "    else:\n",
    "        return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "        score = float(input(\"请输入成绩（0-100）: \"))\n",
    "        if not 0 <= score <= 100:\n",
    "            print(\"成绩必须在0到100之间。\")\n",
    "        else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    " main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x182b3dbcd70>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a0fa5c1130>,\n",
       " <matplotlib.lines.Line2D at 0x1a0fa5c0f80>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,10*np.pi)\n",
    "plt.plot(x,np.sin(x+np.pi),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy                     2.1.3\n",
      "matplotlib-inline         0.1.7\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "\n",
    "\n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      *\n",
      "     ***\n",
      "    *****\n",
      "   *******\n",
      "  *********\n",
      " ***********\n",
      "*************\n",
      "  **\n",
      "  **\n"
     ]
    }
   ],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * trunk_space + '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 7.0.1 (20221109.1506)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"208pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 208.12 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 204.12,-472 204.12,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-468 73.06,-468 73.06,-432 127.06,-432 127.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-446.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"200.18,-396 40.91,-396 -0.06,-360 159.21,-360 200.18,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-374.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-431.7C100.06,-424.41 100.06,-415.73 100.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-407.62 100.06,-397.62 96.56,-407.62 103.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"143.06,-324 57.06,-324 57.06,-288 143.06,-288 143.06,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-302.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-359.7C100.06,-352.41 100.06,-343.73 100.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-335.62 100.06,-325.62 96.56,-335.62 103.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"152.56,-252 47.56,-252 47.56,-216 152.56,-216 152.56,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-287.7C100.06,-280.41 100.06,-271.73 100.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-263.62 100.06,-253.62 96.56,-263.62 103.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"165.56,-180 34.56,-180 34.56,-144 165.56,-144 165.56,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-215.7C100.06,-208.41 100.06,-199.73 100.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-191.62 100.06,-181.62 96.56,-191.62 103.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-108 73.06,-108 73.06,-72 127.06,-72 127.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-143.7C100.06,-136.41 100.06,-127.73 100.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-119.62 100.06,-109.62 96.56,-119.62 103.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-36 73.06,-36 73.06,0 127.06,0 127.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-71.7C100.06,-64.41 100.06,-55.73 100.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-47.62 100.06,-37.62 96.56,-47.62 103.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x20baea4e410>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                                                *                                                                                                                                 \n",
      "                                                                                                                               * *                                                                                                                                \n",
      "                                                                                                                              * * *                                                                                                                               \n",
      "                                                                                                                            * ** ** *                                                                                                                             \n",
      "                                                                                                                          * ** *** ** *                                                                                                                           \n",
      "                                                                                                                     * *** ***** ***** *** *                                                                                                                      \n",
      "                                                                                                             * *** ******** ********** ******** *** *                                                                                                             \n",
      "                                                                                           * **** *********** ****************** ****************** *********** **** *                                                                                            \n",
      "                                                            * **** ************** **************************** *********************************** **************************** ************** **** *                                                             \n",
      "* ***** ****************** ****************************************** *************************************************************** *************************************************************** ****************************************** ****************** ***** *\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(n):\n",
    "    triangle = []\n",
    "    for i in range(n):\n",
    "        row = [1] * (i + 1)\n",
    "        for j in range(1, i):\n",
    "            row[j] = triangle[i-1][j-1] + triangle[i-1][j]\n",
    "        triangle.append(row)\n",
    "    return triangle\n",
    " \n",
    "def draw_pascals_triangle(triangle, max_value_per_star=2):\n",
    "    # 确定三角形中的最大值，用于缩放星号数量\n",
    "    max_value = max(max(row) for row in triangle)\n",
    "    \n",
    "    # 根据元素值确定星号数量的函数\n",
    "    def num_stars(value):\n",
    "        return (value // max_value_per_star) + (1 if value % max_value_per_star != 0 else 0)\n",
    "    \n",
    "    # 计算每行需要的最大宽度（包括空格）\n",
    "    max_width = max(len(''.join(['*' * num_stars(num) for num in row])) for row in triangle)\n",
    "    \n",
    "    for row in triangle:\n",
    "        # 生成星号字符串列表\n",
    "        stars = ['*' * num_stars(num) for num in row]\n",
    "        # 将星号列表转换为字符串，并用空格填充到最大宽度\n",
    "        formatted_row = ' '.join(stars).center(max_width)\n",
    "        # 打印当前行\n",
    "        print(formatted_row)\n",
    " \n",
    "# 设置要生成的杨辉三角形的行数\n",
    "n = 10\n",
    "triangle = generate_pascals_triangle(n)\n",
    "draw_pascals_triangle(triangle)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//img//海绵宝宝.jpg\" width=\"150 \" alt=\"海绵宝宝\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WO0#?]??---?_?--?;ru]]]]][?_~><~-}[[[[[[}{{{{{{}},}}}}}},}}[?_~<~<^}}}}}}}{{wOdO\n",
      "#O0a?]?---???????][i]]]???+_><_][?}[[}[[[}1}}}}{[[[[[[[[}}[?+<>><`[[[}[[[[}}h0p*\n",
      "pOL*??:x[?]]???-[}?-?^-[?~><>+?]]?t\"]]]]-}[<>>+}}[]-]][?[[])_><<;l][[[]][[[[b0p*\n",
      "wCLtYXU]??-----________+~ii>+__+_-_-_____}+>>>>~})----??]~+ll!~_--------__}(w0pM\n",
      "#QLx\\}<!{|_+__--_++_++<iii~~i+++___++++_?}-<>>~{??r--~]l!!ill!ij++_+++------a0w#\n",
      "WQLQnf)UCQvvv|~>iu_+~<iii>++++++++~~~~++-}}[}}1>}}{_-[?}?)_<--<+|(?l}1t|---~#Qp*\n",
      "#0LxuJ-<}tXJXz~:_v+~i!ii<+++++++~~~<<~+++}}}b|}}u:::]<}|[?~{}}_-t)-i]1/{-!i_*0w*\n",
      "MCLr/)?{{Qcvti<;]X(+i!!<++++++~~<<<<<++++\\kp}}}[:::::+~I><([-[}}}}x>}\\f}?!+_h0p*\n",
      "#LLCC{z{{Jvc|+/_v;;::}}\\<++~~~<<<><<~<<~~f{,:::U::::,,][>!><>}}}}}}}}tt)?!~_h0q#\n",
      "M00*j{-1}vvv\\~X}f;:!!lIIll\\\\(<<<<<<<<<~<<<B::::Y:*Z,,,~il}rrf}}}}~<~?}{1?!~_h0q#\n",
      "*CQUJjt)||)_1z-11I>i>IlpIIkIII])<><<<<<<<<\"::^b::,J,,\"~[}}:<+-}}}~>>>>+}+!~_k0qM\n",
      "MLXLJft/\\|(?{[+-;I;;II~\"::#IIwlllII|<<<<>>M::Id,:,:,,~-}}}}__(-}}}~>>>>~[!>(oZq#\n",
      "#CLcx/rtxzc;,t;II][l,:::::::/IIIIlblIIII(>iIn,::,,,,^}}}}}}1<(?l|}}>>>>i_\\+|hmw*\n",
      "WQQJv/(\\\\\\|I:fII;;l!:::l+l~,;III,;dI:;IIlI:{}]_,+~+_?}}}}}}}c{}}}}->>>ii[1]|hOqM\n",
      "WO0cv/\\||\\1I,ImIlII/:::%-u#.IIII,:::,d>hi{}}[-?+_>~_}{}}}}}}}}{}}_<>iiii]!x|hZq*\n",
      "MOQzzfz\\\\1^;III,IIIII;,,._\"IIII~?!?,::pll}/[?]++-+-]}t}}}}}]}}}}{<>>i<~{]ir/fZp*\n",
      "#OQzzIIlII;iI;;8lII;I;;,::,IIII:?dd>::,lI;:?+++_-}+}[{[}}}{}}]}}}}?_-_1x)<]\\tZm#\n",
      "#O0UJnb;I`:,\"xI;;lI;;;I,::llII::;}d^\":,lI;;}+_--r[}}}}}}}}}}}}|}--_~\\+<l|+[fzZw#\n",
      "#OQJJn1rU;^:;III;;;;;;I\"III`I'::XIlIIII!;;;>?][]}}}}r?~>>>>><-[})l:,::;lllJJLZmM\n",
      "MOOJYn|vY/{^\\I;;;;;;;;I;}M#\"ll,IIIII;III;;{_[}}}}[_<>>>>>>>>>>i>+>::::;!!lrzLZwW\n",
      "MZ0CJn/zJjf)I;;;;;;;II<I;ll;IlIII;IIl:!M|#[[}}+<><>>>>>>>>>>i!!!~+]l::Il,(unm0q#\n",
      "#O0UUXLYzcv(;i;;;;;II;ll;;;;Iill;v::::::::::::l<>>>>>>>>>>>>il<~+?}{x:?il|XuX0ZM\n",
      "MOQUJXUvvnvf;~:;::;IIIIIIIIlMIl\"::::LULr0+_UQp!<>>>>>>>>>><<~~~<]}{}}?I!!/UXn0OM\n",
      "*O0UUcvvux();;Ii:;;;;;IIIIIIlIll:Uz_CjLJJ_LiLCJ<>>><~+-[}}-+~~<?}}}}{;_ii/JUUQm&\n",
      "#0QYXzvvx/{;::~__+;;;;;;;;;;;I;IlUctffnu1lrjCCU}{{{[?-~<<!!!~+]}}{{~>r1/n\\()c0w#\n",
      "#OQCLCcvt1/_;;;I:II;;;;;;;;;;<~;-Yvfn,^r\"f/rrLL}}{<<<><>}!i<--}->k>i>\\))zYJJqOm#\n",
      "*00YXnjt(+~p|+?{{[Wa\"llIII;I;I;;IZCrth{j~+rzC;;;}}}[]-__++]xbq}{{{{{?{ur<>\\naOwM\n",
      "oOLXuI::c~~<i<[+-[?+*n[}{{{{{{[[}{CCCn/nzCC:,;;;}{}}}??~~?_}})qb-}[}}}}d~ttuhOq&\n",
      "*CJ<>::,~>!!><<<<<>+<~+_]}{{}[[[}}C'(^,JQ:\")\"I;I{}}}?<<<+~n-~<<<<<<<<<?}-~~v0Op&\n",
      "bYU~!I)#~<i><<<<<<<<<<<<<<<<<<<<<</CLZ|mC^I.OCO-<<>illl!i><<<<<<<<<<~[}{?_</qQw#\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\21342\\AppData\\Local\\Temp\\ipykernel_24644\\1178852349.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 30\n",
    "show_width = 80\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"..\\\\海绵宝宝.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
